package licode.unisop.realm.client.api;

import licode.unisop.provider.info.*;
import licode.unisop.provider.vo.SiAccountSet;
import licode.unisop.provider.vo.SiIdentitySet;
import licode.unisop.provider.vo.SiUser;
import licode.unisop.realm.client.info.SiResetPasswordIn;
import licode.unisop.realm.client.info.SiUpdatePasswordIn;
import licode.unisop.realm.client.info.SiUserAttrRemoveIn;

/**
 * 定义用户保存接口
 *
 * @author licode
 */
public interface SiUserService {
    /**
     * 更新用户缓存
     * @param userId 用户ID信息
     */
    void updateCache(SiUserId userId);

    /**
     * 修改用户密码
     * @param info 账号信息
     */
    void updatePassword(SiUpdatePasswordIn info);

    /**
     * 重置用户密码
     * @param info 账号信息
     */
    void resetPassword(SiResetPasswordIn info);

    /**
     * 保存用户的账号信息
     * @param info 账号信息
     */
    void saveAccountSet(SiAccountSet info);
    void saveAccount(SiAccountIn info);

    /**
     * 保存用户的认证信息
     * @param info 认证信息
     */
    void saveIdentitySet(SiIdentitySet info);
    void saveIdentity(SiIdentityIn info);

    /**
     *  保存用户信息（没有插入、存在更新）
     * @param user 用户信息
     */
    SiUser saveUser(SiUser user);
    void removeAttrOfUser(SiUserAttrRemoveIn req);

    /**
     * 更新用户登录时间
     * @param loginTimeIn 登录时间
     */
    void updateLoginTime(SiUserLoginTimeIn loginTimeIn);

    /**
     * 保存或更新用户分组信息
     * @param group 分组信息
     */
    void saveUserGroup(UserGroupSaveIn group);

    /**
     * 把指定分组分配给用户
     * @param req 请求信息
     */
    void assignGroupToUsers(SiGroupAssignToUsersIn req);

    /**
     * 把领域用户分组分配给平台
     */
    void assignGroupsToPlatform(SiUserGroupsAssignToPlatIn req);
    void assignPlatsToUserGroup(SiPlatsAssignToUserGroupIn req);

    void clearGroupsOfPlatform(SiRealmGroupsOfPlatClearIn req);
    void saveGroupsOfPlatform(SiUserGroupsAssignToPlatIn req);

    /**
     * 把领域用户分组从平台移除
     */
    long removeGroupFromPlatform(UserGroupRemoveFromPlatIn req);

    /**
     * 把领域用户从分组移除
     */
    void removeUsersFromGroup(UsersRemoveFromGroupIn req);
}
